package model;

import java.util.ArrayList;
import java.util.List;

import model.exception.CompteNonValideException;
import model.exception.ForfaitNonValideException;

import observer.NotificationActionOffreManager;
import observer.ObserverOffreManager;

public class Employe extends Personnel implements OffreManager{

	public Employe(){
		super() ;
	}
	
	public Employe(String n, String p, String num, String typeV, String nomV, String code, String v,String pa, String ma, int an, int m, int jo, String mdp,String id,String idAgence) {
		
		super(n, p, num, typeV, nomV, code, v,pa, ma, an, m, jo, mdp,id,idAgence) ;
		addObserver(new ObserverOffreManager());
	}
	/**
	 * Ajout d'un Demandeur
	 * @param d Le Demandeur a ajouter
	 */
	public void ajouterDemandeur(Demandeur d){
		AgenceManager.getInstance().getListeDemandeur(identifiantAgence).add(d);
	}
	/**
	 * Suppression d'un Demandeur
	 * @param d Le Demandeur a supprimer
	 */
	public void supprimerDemandeur(Demandeur d){
		AgenceManager.getInstance().getListeDemandeur(identifiantAgence).add(d);
	}

	public void ajouterOffre(Offre o, Compte c) throws ForfaitNonValideException, CompteNonValideException {
		c.solder(AgenceManager.getInstance().getPrixAnnonce(identifiantAgence));		
		AgenceManager.getInstance().getListeOffre(identifiantAgence).add(o);
		notificationOffreManager(o,"Ajout");	
	}

	public void modifierOffre(Offre ancienneOffre, Offre nouvelleOffre) {
		AgenceManager.getInstance().getListeOffre(identifiantAgence).set(AgenceManager.getInstance().getListeOffre(identifiantAgence).indexOf(ancienneOffre), nouvelleOffre);
		notificationOffreManager(ancienneOffre,"Modification");
		
	}

	public void supprimerOffre(Offre o) {		
		AgenceManager.getInstance().getListeOffre(identifiantAgence).remove(o);
		notificationOffreManager(o,"Suppression");	
	}	

	
	public void notificationOffreManager(Offre o,String typeModif) {
		setChanged();
		notifyObservers(new NotificationActionOffreManager(this, typeModif,o));
		clearChanged();
		
	}
	
	
}
